package models;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import play.db.jpa.Model;
import securesocial.provider.SocialUser;
import securesocial.provider.UserId;
import controllers.securesocial.SecureSocial;

@Entity
public class Usuario extends Model {

	private String email;
	private String password;
	private String nombre;
	private String socialUserId;

	@OneToOne
	private Perfil perfil;
	
	@OneToMany(cascade=CascadeType.ALL)
	private List<Plan> planes = new ArrayList<Plan>();
	
	@ManyToOne
	private Nutri nutricionista;

	@OneToMany(cascade=CascadeType.ALL)
	private List<Frecuente> frecuentes = new ArrayList<Frecuente>();
	
	public Usuario(String email, String password, String nombre) {
		this.email = email;
		this.password = password;
		this.nombre = nombre;
	}
	
	public Usuario(String email, String password, String nombre, UserId socialUserId) {
		this.email = email;
		this.password = password;
		this.nombre = nombre;
		this.socialUserId = socialUserId.id;
	}
	
	public static Usuario connect(String email, String password) {
		return find("byEmailAndPassword", email, password).first();
	}

	public static boolean existeUsuario(String email){
		return find("byEmail", email) != null;
	}

	public static String getModelUserIdSinceSociaUserlId() {
		SocialUser socialUser = SecureSocial.getCurrentUser();
		String socialUserId = socialUser.id.id;
		Usuario currentUser = Usuario.find("bySocialUserId", socialUserId).first();
		return currentUser.id.toString();
	}
	
	public List<Plan> getPlanes() {
		return planes;
	}

	public void setPlanes(List<Plan> planes) {
		this.planes = planes;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Nutri getNutricionista() {
		return nutricionista;
	}

	public void setNutricionista(Nutri nutricionista) {
		this.nutricionista = nutricionista;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public String getSocialUserId() {
		return socialUserId;
	}

	public void setSocialUserId(String socialUserId) {
		this.socialUserId = socialUserId;
	}

	public List<Frecuente> getFrecuentes() {
		return frecuentes;
	}

	public void setFrecuentes(List<Frecuente> frecuentes) {
		this.frecuentes = frecuentes;
	}
}
